import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class Test2 {
    public static void main(String[] args) {
        ArrayList<String> list1 = new ArrayList<>();// 初始大小0
        list1.add("haha");// 第一次放东西：数组扩容为10,放满10个，以1.5倍扩容
        ArrayList<String> list2 = new ArrayList<>(12);// 初始大小13
    }

    public static void main3(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        // add方法默认放到数组的最后一个位置
        list.add(0,"三团");

        ArrayList<String> list2 = new ArrayList<>();
        list2.add("我是测试list");
        list.addAll(list2);// 把一个list作为整体传进来
        System.out.println(list);
        list.remove(0);// 删除下标为0的元素
        list.set(0,"哈哈哈");// 将下标为0的元素更新
        //list.clear();
        System.out.println("是否包含c："+list.contains("c"));
        System.out.println("c所在下标："+list.indexOf("c"));
        System.out.println("最后一个c所在下标："+list.lastIndexOf("c"));

        // 截取字符串
        System.out.println("list："+list);
        List<String> subList = list.subList(1, 3);// 截取1~3给sublist
        // ！！！这里是直接把地址给它，可以通过sublist来修改list里面的值
        System.out.println("subList："+subList);
        System.out.println(list);

    }

    public static void main2(String[] args) {
        ArrayList<String> list = new ArrayList<>();//创建一个空的列表
        list.add("hello");
        list.add("jack");
        list.add("哈哈");
//        Iterator<String> iterator = list.iterator();
//        while (iterator.hasNext()) {
//            String next =  iterator.next();// 先使用这个方法
//            if(next.equals("hello")){
//                iterator.remove();
//            }else {
//                System.out.print(next + " ");
//            }
//        }
        System.out.println("\n===============");
        // 实现了list接口的
        ListIterator<String> iterator2 = list.listIterator();
        while (iterator2.hasNext()) {
            String next =  iterator2.next();// 先使用这个方法
            if(next.equals("hello")){
                iterator2.add("三团~");// 在打印的过程中，往list集合里面添加东西
            }else {
                System.out.print(next + " ");
            }
        }
        System.out.println("\n=================");
        System.out.println(list);//返回list
    }

    public static void main1(String[] args) {
        List<String> list = new ArrayList<>();

        ArrayList<String> arrayList = new ArrayList<>();//创建一个空的列表
        arrayList.add("hello");
        arrayList.add("jack");

        // 创建一个长度为10列表
        //ArrayList<String> arrayList2 = new ArrayList<>(10);
        // 使用另外一个arrayList列表对arrayList2进行初始化
        ArrayList<String> arrayList2 = new ArrayList<>(arrayList);

        // 打印
        // 1、直接打印 ---> 调用toString方法
        System.out.println(arrayList2);// 调用底层的toString方法，这里是输出字符串
        System.out.println("================");
        // 2、for循环
        for (int i = 0; i < arrayList2.size(); i++) {
            System.out.print(arrayList2.get(i) + " ");
        }
        System.out.println("\n================");
        // 3、增强for循环
        for (String s : arrayList2) {
            System.out.print(s + " ");
        }
        System.out.println("\n================");
        // 4、迭代器
        Iterator<String> iterator = arrayList2.iterator();
        while (iterator.hasNext()) {
            String next =  iterator.next();
            System.out.print(next + " ");
        }
        System.out.println("\n================");
        // list迭代器 还具备add、remove方法等
        ListIterator<String> iterator2 = arrayList2.listIterator();
        while (iterator2.hasNext()) {
            iterator2.add("三团");
            String next =  iterator2.next();
            System.out.print(next + " ");
        }
    }
}
